/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ASAExpr;

import ASAExpr.ASAExprRecupIdent;
import exception.DivisionByZeroException;
import exception.VariableNonDeclareeException;

/**
 *
 * @author FM & KB
 */
public class ASAExprPlus extends ASAExpr {

    private ASAExpr e1;
    private ASAExpr e2;

    public ASAExprPlus(ASAExpr e1, ASAExpr e2) {
        this.e1 = e1;
        this.e2 = e2;
    }

    public ASAExpr getExpr1() {
        return e1;
    }

    @Override
    public ASAExpr getExpr2() {
        return e2;
    }

    public int evalue() throws VariableNonDeclareeException, DivisionByZeroException {
        return e1.evalue() + e2.evalue();
    }

    public ASAExpr simplifie() throws VariableNonDeclareeException, DivisionByZeroException {
        ASAExpr se1 = e1.simplifie();
        ASAExpr se2 = e2.simplifie();

        //Si les deux parties de l'expression sont des entiers
        //Traitement -> On retourne un entier correspondant a la somme des deux.
        if (se1 instanceof ASAExprEntier && se2 instanceof ASAExprEntier) {
            return new ASAExprEntier(se1.evalue() + se2.evalue());
        }


        //Si la partie gauche vaut 0
        //Traitement -> On retourne la partie droite
        if (se2.getClass() != ASAExprRecupIdent.class) {
            if (se2.evalue() == 0) {
                return se1;
            }
        }


        //Si la partie droite vaut 0
        //Traitement -> On retourne la partie gauche
        if (se1.getClass() != ASAExprRecupIdent.class) {
            if (se1.evalue() == 0) {
                return se2;
            }
        }

        //Sinon on retourne l'expression
        return new ASAExprPlus(se1, se2);
    }

    @Override
    public String getLabelExplorateur() {
        return "PLUS";
    }
}
